/**
 * 给一个树，对每个节点求距离为9的点的数量
 * 典型的换根DP
 * 以1为根
 * 令 D[i][j] 为节点i距离为j的点的数量
 *   D[i][j] = SIGMA{D[son][j - 1]}
 * 再令 F[i][j] 表示节点i经过父节点距离为j的点的数量
 *   F[i][j] = F[parent][j - 1] + D[parent][j - 1] - D[i][j - 2]
 */
#include <bits/stdc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;

int N;
vector<vi> G;
vector<array<int, 10>> D;
vector<array<int, 10>> F;

void dfs(int u, int p){
    auto & d = D[u];
    fill(d.begin(), d.end(), 0);
    d[0] = 1;

    for(auto v : G[u]){
        if(v == p) continue;
        dfs(v, u);
        for(int i=1;i<10;++i){
            d[i] += D[v][i - 1];
        }
    }

    return;
}

void ddpp(int u, int p){
    auto & f = F[u];
    fill(f.begin(), f.end(), 0);
    
    if(p){
        f[1] = 1;
        for(int i=2;i<10;++i){
            f[i] = F[p][i - 1] + D[p][i - 1] - D[u][i - 2];
        }
    }
    for(auto v : G[u]){
        if(v == p) continue;
        ddpp(v, u);
    }
    return;
}

void work(){
    cin >> N;
    G.assign(N + 1, {});
    for(int a,b,i=1;i<N;++i){
        cin >> a >> b;
        G[a].push_back(b);
        G[b].push_back(a);
    }

    D.assign(N + 1, array<int, 10>{0});
    dfs(1, 0);

    F.assign(N + 1, array<int, 10>{0});
    ddpp(1, 0);

    for(int i=1;i<=N;++i){
        cout << D[i][9] + F[i][9] << " ";
    }
    cout << endl;
    return;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);	
    int nofkase = 1;
    // cin >> nofkase;
    while(nofkase--) work();
	return 0;
}